package com.diankangwo.dao;

import cn.beecloud.bean.BCOrder;

import java.util.Map;

/**
 * 订单实时支付
 * 
 * @author Mr.Zhu
 * @version 2015-11-13 10:13:01
 *
 */
public interface OrderMomentPayDAO {

	/**
	 * 微信扫码
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态调用getCodeUrl()方法返回二维码字符串，返回code
	 *         url的格式为：weixin://wxpay/bizpayurl?sr=XXXXX。 请开发者调用第三方库将返回的code
	 *         url生成二维码图片。 该模式链接较短，生成的二维码打印到结账小票上的识别率较高。 错误状态记录日志并返回null
	 */
	public BCOrder wechatQrsPay(Integer totalFee, String billNo, String title);

	/**
	 * 微信公众号
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态调用getWxJSAPIMap()方法返回jsapi map对象；错误状态记录日志并返回null
	 */
	public Map<String, String> wechatJSAPIPay(Integer totalFee, String billNo, String title);

	/**
	 * 银联网页
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回HTML，错误状态记录日志并返回null
	 */
	public BCOrder unionWebPay(Integer totalFee, String billNo, String title);
	
	/**
	 * 银联移动网页
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回HTML，错误状态记录日志并返回null
	 */
	public BCOrder unionWapPay(Integer totalFee, String billNo, String title);

	/**
	 * 阿里网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @param optional
	 *            附加数据，用户自定义的参数，将会在webhook通知中原样返回，该字段主要用于商户携带订单的自定义数据(选填)
	 * @return 正确状态返回HTML，错误状态记录日志并返回null
	 */
	public BCOrder aliPay(Integer totalFee, String billNo, String title, Map<String, Object> optional);

	/**
	 * 阿里扫码支付
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回HTML网页；错误状态记录日志并返回null
	 */
	public String aliQrPay(Integer totalFee, String billNo, String title);

	/**
	 * 阿里移动网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @param returnType
	 *            自定义返回类型：getUrl：返回跳转URL；getHtml：返回网页;默认返回HTML
	 * @return 正确状态返回getUrl或getHtml；错误状态记录日志并返回null
	 */
	public BCOrder aliwapPay(Integer totalFee, String billNo, String title, String returnType);

	/**
	 * 快钱网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回HTML网页；错误状态记录日志并返回null
	 */
	public String kqWebPay(Integer totalFee, String billNo, String title);

	/**
	 * 快钱移动网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态调用返回HTML；错误状态记录日志并返回null
	 */
	public String kqWapPay(Integer totalFee, String billNo, String title);

	/**
	 * 京东网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回HTML；错误状态记录日志并返回null
	 */
	public String jdWebPay(Integer totalFee, String billNo, String title);

	/**
	 * 京东移动网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回HTML；失败状态记录日志并返回null
	 */
	public String jdWapPay(Integer totalFee, String billNo, String title);

	/**
	 * 易宝网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @param returnType
	 *            自定义返回类型：getUrl:返回跳转URL；getHtml：返回html网页，默认返回HTML
	 * @return 成功状态返回URL或HTML；错误状态记录日志并返回null
	 */
	public String yeeWebPay(Integer totalFee, String billNo, String title, String returnType);

	/**
	 * 易宝移动网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回跳转URL；错误则记录日志并返回null
	 */
	public String yeeWapPay(Integer totalFee, String billNo, String title);

	/**
	 * 百度网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回支付url；错误状态记录日志并返回null
	 */
	public String bdWebPay(Integer totalFee, String billNo, String title);

	/**
	 * 百度移动网页调用
	 * 
	 * @param totalFee
	 *            订单总金额，只能为整数，单位为分，例如1，(必填)
	 * @param billNo
	 *            商户订单号，8到20个字符内，数字和/或字母组合，确保在商户系统中唯一，例如(201506101035040000001),
	 *            (必填)
	 * @param title
	 *            订单标题， 32个字节内，最长支持16个汉字，(必填)
	 * @return 正确状态返回支付URL；错误状态记录日志并返回null
	 */
	public String bdWapPay(Integer totalFee, String billNo, String title);

}
